Zum Hauptinhalt springen

iOS SDK

Bauen Sie AR Clip VPS in eine native iOS-App ein. Das SDK nutzt das Tracking von ARKit, um die Position des Nutzers auf Ihren VPS-Karten zu bestimmen. Es ist ein XCFramework und funktioniert in Apps mit UIKit, RealityKit und SwiftUI.

Bevor Sie beginnen​

  • iOS 15.0 oder neuer
  • Xcode 14 oder neuer (Swift 5.7 oder neuer)
  • Ein Gerät, auf dem ARKit läuft. Der Simulator wird nicht unterstützt.

Installieren​

Wählen Sie einen von zwei Wegen.

Swift Package Manager​

  1. Wählen Sie in Xcode File → Add Packages….
  2. Geben Sie https://github.com/WebAR-Studio/was-vps-ios.git ein.
  3. Wählen Sie den gewünschten Branch oder Tag und fügen Sie das Paket Ihrem Target hinzu.

Manuell​

  1. Klonen Sie das Repository:
    git clone https://github.com/WebAR-Studio/was-vps-ios.git
  2. Ziehen Sie WASVPS.xcframework in Ihr Projekt.
  3. Prüfen Sie unter General → Frameworks, Libraries, and Embedded Content, dass das Framework eingebettet ist.

Berechtigungen hinzufügen​

Tragen Sie in Info.plist Beschreibungen für die Nutzung von Kamera und Standort ein, damit iOS den Nutzer um Zugriff bitten kann.

<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera to display augmented reality content.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to your location to place AR content accurately.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>VPSLocalization</key>
<string>Enable precise location for accurate AR content positioning.</string>
</dict>

VPS starten​

Rufen Sie VPSBuilder.initializeVPS auf, um einen VPSService zu erstellen. Übergeben Sie die ARSession, Ihren API-Schlüssel und Ihre Standort-IDs.

Brauchen Sie einen API-Schlüssel?

Sie erhalten ihn auf arclip.design oder per E-Mail an support@arclip.design.

import ARKit
import WASVPS

final class VPSDemoController: UIViewController, ARSCNViewDelegate {
@IBOutlet private weak var sceneView: ARSCNView!
private var configuration: ARWorldTrackingConfiguration?
private var vps: VPSService?

override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene()

configuration = VPSBuilder.getDefaultConfiguration()

VPSBuilder.initializeVPS(
arSession: sceneView.session,
apiKey: "your-api-key",
locationIds: ["your-location-id"],
url: "https://api.arclip.app/vps/api/v3",
gpsUsage: false,
delegate: self
) { service in
self.vps = service
self.vps?.start()
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let configuration { sceneView.session.run(configuration) }
}

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
vps?.frameUpdated()
}
}

extension VPSDemoController: VPSServiceDelegate {
func positionVPS(pos: ResponseVPSPhoto) {
print("Localized pose:", pos)
}

func error(err: NSError) {
print("VPS error:", err)
}

func sending(requestData: UploadVPSPhoto?) {
print("Sending localization request…")
}
}

Pausieren Sie den Dienst in sessionWasInterrupted und starten Sie ihn in sessionInterruptionEnded wieder.

RealityKit​

Mit RealityKit leiten Sie die Frames in ARSessionDelegate weiter:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
vps?.frameUpdated()
}

Die Aufrufe für den Lebenszyklus (start, stop, clearCustomLocPos) sind dieselben wie mit SceneKit.

SwiftUI​

Verpacken Sie ARSCNView oder ARView in UIViewRepresentable oder UIViewControllerRepresentable. Halten Sie VPSService in einem gemeinsamen View-Model und rufen Sie start() / stop() aus SwiftUI-Steuerelementen auf.

Weitere Optionen​

  • Geben Sie mit setCustomLocPosForFirstRequest vor der ersten Lokalisierung eine bekannte Transformation vor.
  • Nutzen Sie einen anderen Endpunkt, indem Sie initializeVPS eine andere url übergeben.
  • Schalten Sie gpsUsage ein, um die Koordinaten des Geräts in die Anfragen aufzunehmen.

Fehlerbehebung​

  • Gibt VPSBuilder.getDefaultConfiguration() den Wert nil zurück, wird das Gerät nicht unterstützt.
  • Werden die Callbacks nie aufgerufen, prüfen Sie, ob frameUpdated() in jedem Frame läuft und ob Ihr API-Schlüssel und Ihre Standort-IDs gültig sind.
  • Beispiele für UIKit, RealityKit und SwiftUI finden Sie im Ordner /examples.